var macrosVersion = "unknown"
var macrosReleaseDate = "unknown"
var macrosReleaseUrl = "https://wiki.visionminer.com/home/22IDEX/V4/firmwareupdate"

var macrosVersionPath = "0:/sys/version.txt"
var slicerVersionPath = "0:/sys/slicer/version.txt"

if fileexists(var.macrosVersionPath)
  var macrosVersionContent = fileread(var.macrosVersionPath, 0, 2, ',')
  set var.macrosVersion = var.macrosVersionContent[0] ^ ""
  set var.macrosReleaseDate = var.macrosVersionContent[1] ^ ""

var msgTitle = "22IDEX V4 Software Versions:"
var msgBodyPart1 = "Macro files: " ^ var.macrosVersion
var msgBodyPart2 = ""

var mainBoardCode = "MB6HC"
var expBoardCode = "EXP3HC"
var mainBoardIndex = null
var expBoardIndex = null


var i = 0
while var.i < #boards
  var boardShortName = boards[var.i].shortName ^ ""
  
  if var.boardShortName == var.mainBoardCode
    set var.mainBoardIndex = var.i
  
  if var.boardShortName == var.expBoardCode
    set var.expBoardIndex = var.i

  set var.i = var.i + 1


; Show message about Main Board Firmware
if var.mainBoardIndex != null
  set var.msgBodyPart1 = var.msgBodyPart1 ^ "<br>Main Board: " ^ boards[var.mainBoardIndex].firmwareVersion
else
  set var.msgBodyPart1 = var.msgBodyPart1 ^ "<br>Main Board is not identified"

; Show message about Expansion Board Firmware
if var.expBoardIndex != null
  set var.msgBodyPart1 = var.msgBodyPart1 ^ "<br>Expansion Board: " ^ boards[var.expBoardIndex].firmwareVersion
else
  set var.msgBodyPart1 = var.msgBodyPart1 ^ "<br>Expansion Board is not identified"


; Look for Wifi Module in the interfaces
var wifiBoardVersion = null
if #network.interfaces > 0
  set var.i = 0
  while var.i < #network.interfaces
    if network.interfaces[var.i].type == "wifi"
      set var.wifiBoardVersion = network.interfaces[var.i].firmwareVersion
    
    set var.i = var.i + 1


; Show message about Wifi Module
if var.wifiBoardVersion != null
  set var.msgBodyPart1 = var.msgBodyPart1 ^ "<br>Wi-Fi Module: " ^ var.wifiBoardVersion
else
  set var.msgBodyPart1 = var.msgBodyPart1 ^ "<br>Wi-Fi Module is not identified"

; Append Updates URL
set var.msgBodyPart1 = var.msgBodyPart1 ^ "<br><a href=" ^ var.macrosReleaseUrl ^ " target=_blank>Firmware Update Guide</a>"

; Show info about the Slicer Config
if fileexists(var.slicerVersionPath)
  var slicerVersion = fileread(var.slicerVersionPath, 0, 2, ',')
  set var.msgBodyPart2 = var.msgBodyPart2 ^ "<br>Slicer Config: " ^ var.slicerVersion[0] ^ " (last used)"
else
  set var.msgBodyPart2 = var.msgBodyPart2 ^ "<br>Slicer Config: not used yet"

; Append info about DWC
set var.msgBodyPart2 = var.msgBodyPart2 ^ "<br>Web Control: Go to Settings → Machine Specific, look for DWC"


; Show messages to the user
M291 S4 K{"Next",} R{var.msgTitle} P{var.msgBodyPart1}
M291 S1 T60 R{var.msgTitle} P{var.msgBodyPart2}



; Get integer value of version from version.txt (for macros or slicer)
;
; The idea is to convert Semantic Versioning value like 4.3.2 into a number for further using in conditions.
; Algorithm is easy: MAJOR.MINOR.PATCH is transformed by formula: MAJOR * 1000,000 + MINOR * 1000 + PATCH
; In result 4.3.2 will be converted to 4003002
;
; Use this snippet as an example for other places
var intVersion = 0
var versionArray = fileread("0:/sys/version.txt", 2, 3, ',')
if exists(var.versionArray[0]) && exists(var.versionArray[1]) && exists(var.versionArray[2])
  set var.intVersion = (abs(var.versionArray[0]) * 1000000) + (abs(var.versionArray[1]) * 1000) + abs(var.versionArray[2])